package com.fight.strive.sys.modules.dictionary.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fight.strive.sys.modules.common.PageR;
import com.fight.strive.sys.modules.dictionary.entity.DataDictionaryEntity;
import com.fight.strive.sys.modules.redis.CacheInterface;
import com.fight.strive.sys.modules.validator.StriveValid;

import java.util.List;


public interface DataDictionaryService extends IService<DataDictionaryEntity>, CacheInterface<DataDictionaryEntity> {

    /**
     * 保存字典项目数据
     *
     * @param entity 字典数据模型
     */
    void saveDict(@StriveValid DataDictionaryEntity entity);

    /**
     * 分页查询字典项
     *
     * @param page 分页查询
     * @return 分页数据
     */
    IPage<DataDictionaryEntity> listByPage(PageR<DataDictionaryEntity> page);

    /**
     * 删除字典项
     *
     * @param entity 接口模型
     */
    void removeDict(DataDictionaryEntity entity);

    /**
     * 通过父级字典项ID查询所有子级字典项
     *
     * @param parentId 父级字典项ID
     * @return 所有子级字典项
     */
    List<DataDictionaryEntity> getByParentId(Long parentId);

    /**
     * 通过父级字典代码查询所有子级字典项
     *
     * @param parentCode 父级字典代码
     * @return 所有子组字典项
     */
    List<DataDictionaryEntity> getByParentCode(String parentCode);

    /**
     * 根据字典代码获取字典值
     *
     * @param code 字典项代码
     * @return 字典项的值
     */
    String getNameByCode(String code);

    /**
     * 根据字典代码获取字典对象
     *
     * @param code 字典代码
     * @return 这典对象
     */
    DataDictionaryEntity getByCode(String code);

    /**
     * 根据 id 获取
     *
     * @param id id
     * @return entity
     */
    DataDictionaryEntity getDictById(Long id);

}
